package com.isljj.web_chat2.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.WebSocketSession;

import java.util.concurrent.ConcurrentHashMap;

@Component
@Slf4j
public class OnlineUserManager {
//    线程安全问题
//    userId --  WebSocketSession 映射表
    private ConcurrentHashMap<Integer, WebSocketSession> sessions = new ConcurrentHashMap<>();

    @Override
    public String toString() {
        return sessions.toString();
    }

    //    用户上线
    public boolean online(int userId,WebSocketSession session){
//        多开问题,两个客户端登录一个账号
        if(sessions.get(userId) != null){
//            已经存在,不能再次登录
            log.info("用户重复登录 userId - " + userId);
            return false;
        }
        sessions.put(userId,session);
        log.info("用户上线 userId - " + userId);

        return true;
    }


//    用户下线
    public void offline(int userId,WebSocketSession session) {
        WebSocketSession existSession = sessions.get(userId);
        if(existSession == session){
//            也是多开,怕把第一次登录的session删了
            sessions.remove(userId);
        }
    }
//    根据userId获取WebSocketSession
    public WebSocketSession getSession(int userId){
        return sessions.get(userId);
    }
}
